class Singleton(object):
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls,'_instance'):
            orig=super(Singleton,cls)
            cls._instance=orig.__new__(cls, *args, **kwargs)
        return  cls._instance

class Myclass1(Singleton):
    a=1111
    def __init__(self,b):
        Singleton.__init__(self)
        self.b=b

class Myclass2(Singleton):
    a=1111
    def __init__(self,b):
        Singleton.__init__(self)
        self.b=b

m1=Myclass1(1)
m2=Myclass2(2)
print(m1 is m2)




one=Myclass1()
TWO=Myclass1()

print(one is TWO)
print(one.a)
print(TWO.a)
one.b=9000
print(one.b)
print(TWO.b)

#本质：做实例化的时候，判断有没有类变量_instance,如果没有，我生成一个Singleton的父类对象object实例
# 赋值给_instance(只会做一次)，返回cls._instance，如果有_instance变量，直接返回给cls._instance

#总结：如果是子类或孙类实例化，则2个类生成的实例都是唯一的
#如果是不同的子类做实例化，则2个类生成的实例不是同一个值

#多重继承和多继承不一样

# 1、多重继承：
# class a
# class b(a)
# class c(b)
# class d(c)
# 2、多继承
# class a
# class b
# class c(a,b)


#2个子类，由于类变量地址都是独立的，所以会触发2次if条件的执行，获取2个不同的类实例，所以他们之间的实例不是单例